/**
 * 代码块执行顺序验证类
 */
public class ExecutionOrderDemo {
    // 静态变量
    private static String staticField = "静态变量";

    // 静态代码块1
    static {
        System.out.println(staticField);
        System.out.println("静态代码块1");
    }

    // 实例变量
    private String instanceField = "实例变量";

    // 实例代码块1
    {
        System.out.println(instanceField);
        System.out.println("实例代码块1");
    }

    // 构造方法
    public ExecutionOrderDemo() {
        System.out.println("构造方法");
    }

    // 静态代码块2
    static {
        System.out.println("静态代码块2");
    }

    // 实例代码块2
    {
        System.out.println("实例代码块2");
    }

    // 普通方法
    public void normalMethod() {
        System.out.println("普通方法");
    }

    // 静态方法
    public static void staticMethod() {
        System.out.println("静态方法");
    }

    public static void main(String[] args) {
        /*
         * 执行顺序验证：
         * 1. 类加载阶段（首次使用类时执行，只执行一次）
         *    - 静态变量初始化
         *    - 静态代码块（按代码中的顺序执行）
         */
        System.out.println("----- 第一次实例化 -----");
        ExecutionOrderDemo demo1 = new ExecutionOrderDemo();
        demo1.normalMethod();

        System.out.println("\n----- 第二次实例化 -----");
        ExecutionOrderDemo demo2 = new ExecutionOrderDemo();

        System.out.println("\n----- 调用静态方法 -----");
        ExecutionOrderDemo.staticMethod();
    }
}